home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Go64!
/
Go64_2002-02_2002_CSW_Side_A.d64
/
3d matrixrot.txt
< prev
next >
Wrap
Text File
|
2023-02-26
|
29KB
|
1,369 lines
; go64! tutorial on 3-d graphics
; part 3: matrix rotation
; go64! 3d-kurs
; teil 3: matrixrotation
vicbank = %00000011; $0000-$4000
v = vicbank($03*$4000;=$0000
screen = $0400
charset = $0800
xaddlotb = $2000
xaddhitb = $2080
pixeltab = $2100
basezp = $02
pointers = $00+basezp
alphalo = $02+basezp
betalo = $03+basezp
gammalo = $04+basezp
alpha = $05+basezp
beta = $06+basezp
gamma = $07+basezp
sinbufl0 = $08+basezp
sinbufh0 = $09+basezp
sinbufl1 = $0a+basezp
sinbufh1 = $0b+basezp
unitxxlo = $0c+basezp
unitxxhi = $0d+basezp
unitxylo = $0e+basezp
unitxyhi = $0f+basezp
unitxzlo = $10+basezp
unitxzhi = $11+basezp
unityxlo = $12+basezp
unityxhi = $13+basezp
unityylo = $14+basezp
unityyhi = $15+basezp
unityzlo = $16+basezp
unityzhi = $17+basezp
unitzxlo = $18+basezp
unitzxhi = $19+basezp
unitzylo = $1a+basezp
unitzyhi = $1b+basezp
unitzzlo = $1c+basezp
unitzzhi = $1d+basezp
dividend = $1e+basezp
divisor = $20+basezp
x2dcrdfr = $23+basezp
z2dcrdfr = $2b+basezp
x2dcords = $33+basezp
y2dcords = $3b+basezp
z2dcords = $43+basezp
oldxcrds = $4b+basezp
oldycrds = $53+basezp
foregndc = $01
backgndc = $06
xpos = $0c; char matrix coordinates
ypos = $05; zeichenmatrixkoordinaten
alphaadd = $ffff+1-($0200/3)
betaadd = $0700/3; angle add values
gammaadd = $0300/3; winkeladditionswerte
numpoint = $08
*= $4000
sei
lda #$35
sta $01
lda #<return;nmi
sta $fffa
lda #>return;nmi
sta $fffb
bit $d011
bpl *-3
bit $d011
bmi *-3
lda #$00
sta $d011
lda #backgndc
sta $d020
sta $d021
; build tables
; tabellen generieren
lda #<charset+v
ldx #>charset+v
ldy #$00
.byte $24
mkxaddtb pla
sta xaddlotb,y
pha
txa
sta xaddhitb,y
iny
tya
and #%00000111
bne mkxaddtb+0
pla
clc
adc #$80
bcc *+3
inx
cpy #$80
bne mkxaddtb+1
lda #%10000000
ldx #$00
makpxltb sta pixeltab,x
tay
lsr a
tya
ror a
inx
bpl makpxltb
ldx #$00
lda sincoslo+$00,x
sta sincoslo+$0100,x
lda sincoshi+$00,x
sta sincoshi+$0100,x
inx
bne *-13
; clear charset
; zeichensatz loeschen
lda #<charset+v
sta pointers+0
lda #>charset+v
sta pointers+1
lda #$00
ldx #$08
tay
clearchr sta (pointers+0),y
iny
bne clearchr
inc pointers+1
dex
bne clearchr
; clear screen
; bildschirm loeschen
lda #$00
tax
sta screen+v+$00,x
sta screen+v+$0100,x
sta screen+v+$0200,x
sta screen+v+$0300,x
inx
bne *-13
; set up screen matrix
; bildschirmmatrix bilden
clc
lda #<xpos+(ypos*$28)+screen+v
sta pointers+0
lda #>xpos+(ypos*$28)+screen+v
sta pointers+1
ldx #$00
setupscr txa
ldy #$00
sta (pointers+0),y
adc #$10
iny
cpy #$10
bne setupscr+3
lda #$27
adc pointers+0
sta pointers+0
bcc *+4
inc pointers+1
inx
cpx #$10
bne setupscr
; set foreground colour
; vordergrundfarbe setzen
lda #foregndc
ldx #$00
sta $d800,x
sta $d900,x
sta $da00,x
sta $db00,x
inx
bne *-13
; set vic registers
; vic-register setzen
bit $d011
bpl *-3
bit $d011
bmi *-3
lda #%00011011
sta $d011
lda #%00001000
sta $d016
lda #screen/$40.(charset/$0400)
sta $d018
lda $dd00
and #%00000011
ora #vicbank
sta $dd00
; reset angles and coordinates
; koordinaten&winkel nullsetzen
lda #$00
ldx #numpoint-1
sta oldxcrds,x
sta oldycrds,x
dex
bpl *-5
sta alphalo
sta betalo
sta gammalo
sta alpha
sta beta
sta gamma
; main loop
; hauptschleife
mainloop ; rotate unit vectors
; (absolutely unoptimized)
; einheitsvektoren rotieren
; (absolut unoptimiert)
; cos (beta) * cos (gamma)
clc
lda beta
adc #$40 ; (cos)
sec
sbc gamma
sec
sbc #$40 ; (cos)
tax ; beta-gamma
clc
lda beta
adc #$40 ; (cos)
clc
adc gamma
clc
adc #$40 ; (cos)
tay ; beta+gamma
sec
lda sincoslo+$40,x
sbc sincoslo+$40,y
sta unitxxlo
lda sincoshi+$40,x; cos(b-g)
sbc sincoshi+$40,y; - cos(b+g)
sta unitxxhi
; - sin(a) * sin(b) * cos(g)
; - cos(a) * sin(g)
clc
lda beta
adc gamma
clc
adc #$40 ; (cos)
sec
sbc alpha
sec
sbc #$80 ; (-)
tax ; beta+gamma-alpha
clc
lda alpha
adc #$80 ; (-)
clc
adc gamma
clc
adc #$40 ; (cos)
sec
sbc beta
tay ; alpha+gamma-beta
clc
lda sincoslo+$00,x
adc sincoslo+$00,y
sta sinbufl0
lda sincoshi+$00,x; sin(b+g-a)
adc sincoshi+$00,y;+ sin(a+g-b)
sta sinbufh0
clc
lda alpha
adc #$80 ; (-)
clc
adc beta
sec
sbc gamma
sec
sbc #$40 ; (cos)
tax ; alpha+beta-gamma
clc
lda alpha
adc #$80 ; (-)
clc
adc beta
clc
adc gamma
clc
adc #$40 ; (cos)
tay ; alpha+beta+gamma
sec
lda sincoslo+$00,x
sbc sincoslo+$00,y
sta sinbufl1
lda sincoshi+$00,x; sin(a+b-g)
sbc sincoshi+$00,y;- sin(a+b+g)
sta sinbufh1
clc
lda sinbufl0
adc sinbufl1
sta sinbufl1
lda sinbufh0
adc sinbufh1
cmp #$80
ror a ; - sin(a)*sin(b)*cos(g)
ror sinbufl1
sta sinbufh1
clc
lda alpha
adc #$40+$80 ; (-cos)
sec
sbc gamma
tax ; alpha-gamma
clc
lda alpha
adc #$40+$80 ; (-cos)
clc
adc gamma
tay ; alpha+gamma
sec
lda sincoslo+$40,x
sbc sincoslo+$40,y
sta sinbufl0 ; cos(a-g)
lda sincoshi+$40,x; - cos(a+g)
sbc sincoshi+$40,y
sta sinbufh0 ; - cos(a)*sin(g)
clc
lda sinbufl0
adc sinbufl1
sta unitxylo
lda sinbufh0
adc sinbufh1
sta unitxyhi
; cos(a) * sin(b) * cos(g)
; - sin(a) * sin(g)
clc
lda beta
adc gamma
clc
adc #$40 ; (cos)
sec
sbc alpha
sec
sbc #$40 ; (cos)
tax ; beta+gamma-alpha
clc
lda alpha
adc #$40 ; (cos)
clc
adc gamma
clc
adc #$40 ; (cos)
sec
sbc beta
tay ; alpha+gamma-beta
clc
lda sincoslo+$00,x
adc sincoslo+$00,y
sta sinbufl0
lda sincoshi+$00,x; sin(b+g-a)
adc sincoshi+$00,y;+ sin(a+g-b)
sta sinbufh0
clc
lda alpha
adc #$40 ; (cos)
clc
adc beta
sec
sbc gamma
sec
sbc #$40 ; (cos)
tax ; alpha+beta-gamma
clc
lda alpha
adc #$40 ; (cos)
clc
adc beta
clc
adc gamma
clc
adc #$40 ; (cos)
tay ; alpha+beta+gamma
sec
lda sincoslo+$00,x
sbc sincoslo+$00,y
sta sinbufl1
lda sincoshi+$00,x; sin(a+b-g)
sbc sincoshi+$00,y;- sin(a+b+g)
sta sinbufh1
clc
lda sinbufl0
adc sinbufl1
sta sinbufl1
lda sinbufh0
adc sinbufh1
cmp #$80
ror a ; cos(a)*sin(b)*cos(g)
ror sinbufl1
sta sinbufh1
clc
lda alpha
adc #$80 ; (-)
sec
sbc gamma
tax ; alpha-gamma
clc
lda alpha
adc #$80 ; (-)
clc
adc gamma
tay ; alpha+gamma
sec
lda sincoslo+$40,x
sbc sincoslo+$40,y
sta sinbufl0 ; cos(a-g)
lda sincoshi+$40,x; - cos(a+g)
sbc sincoshi+$40,y
sta sinbufh0 ; - sin(a)*sin(g)
clc
lda sinbufl0
adc sinbufl1
sta unitxzlo
lda sinbufh0
adc sinbufh1
sta unitxzhi
; - cos (beta) * sin (gamma)
clc
lda beta
adc #$40+$80 ; (-cos)
sec
sbc gamma
tax ; beta-gamma
clc
lda beta
adc #$40+$80 ; (-cos)
clc
adc gamma
tay ; beta+gamma
sec
lda sincoslo+$40,x
sbc sincoslo+$40,y
sta unityxlo
lda sincoshi+$40,x; cos(b-g)
sbc sincoshi+$40,y; - cos(b+g)
sta unityxhi
; sin(a) * sin(b) * sin(g)
; - cos(a) * cos(g)
clc
lda beta
adc gamma
sec
sbc alpha
tax ; beta+gamma-alpha
clc
lda alpha
adc gamma
sec
sbc beta
tay ; alpha+gamma-beta
clc
lda sincoslo+$00,x
adc sincoslo+$00,y
sta sinbufl0
lda sincoshi+$00,x; sin(b+g-a)
adc sincoshi+$00,y;+ sin(a+g-b)
sta sinbufh0
clc
lda alpha
adc beta
sec
sbc gamma
tax ; alpha+beta-gamma
clc
lda alpha
adc beta
clc
adc gamma
tay ; alpha+beta+gamma
sec
lda sincoslo+$00,x
sbc sincoslo+$00,y
sta sinbufl1
lda sincoshi+$00,x; sin(a+b-g)
sbc sincoshi+$00,y;- sin(a+b+g)
sta sinbufh1
clc
lda sinbufl0
adc sinbufl1
sta sinbufl1
lda sinbufh0
adc sinbufh1
cmp #$80
ror a ; sin(a)*sin(b)*sin(g)
ror sinbufl1
sta sinbufh1
clc
lda alpha
adc #$40+$80 ; (-cos)
sec
sbc gamma
sec
sbc #$40 ; (cos)
tax ; alpha-gamma
clc
lda alpha
adc #$40+$80 ; (-cos)
clc
adc gamma
clc
adc #$40 ; (cos)
tay ; alpha+gamma
sec
lda sincoslo+$40,x
sbc sincoslo+$40,y
sta sinbufl0 ; cos(a-g)
lda sincoshi+$40,x; - cos(a+g)
sbc sincoshi+$40,y
sta sinbufh0 ; - cos(a)*cos(g)
clc
lda sinbufl0
adc sinbufl1
sta unityylo
lda sinbufh0
adc sinbufh1
sta unityyhi
; - cos(a) * sin(b) * sin(g)
; - sin(a) * cos(g)
clc
lda beta
adc gamma
sec
sbc alpha
sec
sbc #$40+$80 ; (-cos)
tax ; beta+gamma-alpha
clc
lda alpha
adc #$40+$80 ; (-cos)
clc
adc gamma
sec
sbc beta
tay ; alpha+gamma-beta
clc
lda sincoslo+$00,x
adc sincoslo+$00,y
sta sinbufl0
lda sincoshi+$00,x; sin(b+g-a)
adc sincoshi+$00,y;+ sin(a+g-b)
sta sinbufh0
clc
lda alpha
adc #$40+$80 ; (-cos)
adc beta
sec
sbc gamma
tax ; alpha+beta-gamma
clc
lda alpha
adc #$40+$80 ; (-cos)
clc
adc beta
clc
adc gamma
tay ; alpha+beta+gamma
sec
lda sincoslo+$00,x
sbc sincoslo+$00,y
sta sinbufl1
lda sincoshi+$00,x; sin(a+b-g)
sbc sincoshi+$00,y;- sin(a+b+g)
sta sinbufh1
clc
lda sinbufl0
adc sinbufl1
sta sinbufl1
lda sinbufh0
adc sinbufh1
cmp #$80
ror a ; - cos(a)*sin(b)*sin(g)
ror sinbufl1
sta sinbufh1
clc
lda alpha
adc #$80 ; (-)
sec
sbc gamma
sec
sbc #$40 ; (cos)
tax ; alpha-gamma
clc
lda alpha
adc #$80 ; (-)
clc
adc gamma
clc
adc #$40 ; (cos)
tay ; alpha+gamma
sec
lda sincoslo+$40,x
sbc sincoslo+$40,y
sta sinbufl0 ; cos(a-g)
lda sincoshi+$40,x; - cos(a+g)
sbc sincoshi+$40,y
sta sinbufh0 ; - sin(a)*cos(g)
clc
lda sinbufl0
adc sinbufl1
sta unityzlo
lda sinbufh0
adc sinbufh1
sta unityzhi
; sin (beta)
ldx beta
lda sincoslo+$00,x
asl a
sta unitzxlo
lda sincoshi+$00,x
rol a
sta unitzxhi
; sin (alpha) * cos (beta)
sec
lda alpha
sbc beta
sec
sbc #$40 ; (cos)
tax ; alpha-beta
clc
lda alpha
adc beta
clc
adc #$40 ; (cos)
tay ; alpha+beta
sec
lda sincoslo+$40,x
sbc sincoslo+$40,y
sta unitzylo
lda sincoshi+$40,x; cos(a-b)
sbc sincoshi+$40,y; - cos(a+b)
sta unitzyhi
; - cos (alpha) * cos (beta)
clc
lda alpha
adc #$80+$40 ; (-cos)
sec
sbc beta
sec
sbc #$40 ; (cos)
tax ; alpha-beta
clc
lda alpha
adc #$80+$40 ; (-cos)
clc
adc beta
clc
adc #$40 ; (cos)
tay ; alpha+beta
clc
lda sincoslo+$40,x
sbc sincoslo+$40,y
sta unitzzlo
lda sincoshi+$40,x; cos(a-b)
sbc sincoshi+$40,y; - cos(a+b)
sta unitzzhi
; calculate new coordinates
; pretty unoptimized too
; neue koordinaten berechnen
; auch ziemlich unoptimiert
; p(-1;+1;+1)
sec
lda unitxylo
sbc unitxxlo
tax
lda unitxyhi
sbc unitxxhi
tay
clc
txa
adc unitxzlo
sta x2dcrdfr+$00
tya
adc unitxzhi
sta x2dcords+$00
sec
lda unityylo
sbc unityxlo
tax
lda unityyhi
sbc unityxhi
tay
clc
txa
adc unityzlo
tya
adc unityzhi
sta y2dcords+$00
sec
lda unitzylo
sbc unitzxlo
tax
lda unitzyhi
sbc unitzxhi
tay
clc
txa
adc unitzzlo
sta z2dcrdfr+$00
tya
adc unitzzhi
sta z2dcords+$00
; p(+1;+1;+1)
clc
lda unitxxlo
adc unitxylo
tax
lda unitxxhi
adc unitxyhi
tay
clc
txa
adc unitxzlo
sta x2dcrdfr+$01
tya
adc unitxzhi
sta x2dcords+$01
clc
lda unityxlo
adc unityylo
tax
lda unityxhi
adc unityyhi
tay
clc
txa
adc unityzlo
tya
adc unityzhi
sta y2dcords+$01
clc
lda unitzxlo
adc unitzylo
tax
lda unitzxhi
adc unitzyhi
tay
clc
txa
adc unitzzlo
sta z2dcrdfr+$01
tya
adc unitzzhi
sta z2dcords+$01
; p(-1;+1;-1)
sec
lda unitxylo
sbc unitxxlo
tax
lda unitxyhi
sbc unitxxhi
tay
sec
txa
sbc unitxzlo
sta x2dcrdfr+$02
tya
sbc unitxzhi
sta x2dcords+$02
sec
lda unityylo
sbc unityxlo
tax
lda unityyhi
sbc unityxhi
tay
sec
txa
sbc unityzlo
tya
sbc unityzhi
sta y2dcords+$02
sec
lda unitzylo
sbc unitzxlo
tax
lda unitzyhi
sbc unitzxhi
tay
sec
txa
sbc unitzzlo
sta z2dcrdfr+$02
tya
sbc unitzzhi
sta z2dcords+$02
; p(+1;+1;-1)
clc
lda unitxxlo
adc unitxylo
tax
lda unitxxhi
adc unitxyhi
tay
sec
txa
sbc unitxzlo
sta x2dcrdfr+$03
tya
sbc unitxzhi
sta x2dcords+$03
clc
lda unityxlo
adc unityylo
tax
lda unityxhi
adc unityyhi
tay
sec
txa
sbc unityzlo
tya
sbc unityzhi
sta y2dcords+$03
clc
lda unitzxlo
adc unitzylo
tax
lda unitzxhi
adc unitzyhi
tay
sec
txa
sbc unitzzlo
sta z2dcrdfr+$03
tya
sbc unitzzhi
sta z2dcords+$03
; p(-1;-1;+1)
sec
lda unitxzlo
sbc unitxxlo
tax
lda unitxzhi
sbc unitxxhi
tay
sec
txa
sbc unitxylo
sta x2dcrdfr+$04
tya
sbc unitxyhi
sta x2dcords+$04
sec
lda unityzlo
sbc unityxlo
tax
lda unityzhi
sbc unityxhi
tay
sec
txa
sbc unityylo
tya
sbc unityyhi
sta y2dcords+$04
sec
lda unitzzlo
sbc unitzxlo
tax
lda unitzzhi
sbc unitzxhi
tay
sec
txa
sbc unitzylo
sta z2dcrdfr+$04
tya
sbc unitzyhi
sta z2dcords+$04
; p(+1;-1;+1)
sec
lda unitxxlo
sbc unitxylo
tax
lda unitxxhi
sbc unitxyhi
tay
clc
txa
adc unitxzlo
sta x2dcrdfr+$05
tya
adc unitxzhi
sta x2dcords+$05
sec
lda unityxlo
sbc unityylo
tax
lda unityxhi
sbc unityyhi
tay
clc
txa
adc unityzlo
tya
adc unityzhi
sta y2dcords+$05
sec
lda unitxzlo
sbc unitzylo
tax
lda unitzxhi
sbc unitzyhi
tay
clc
txa
adc unitzzlo
sta z2dcrdfr+$05
tya
adc unitzzhi
sta z2dcords+$05
; p(-1;-1;-1)
sec
lda #$00
sbc unitxxlo
tax
lda #$00
sbc unitxxhi
tay
sec
txa
sbc unitxylo
tax
tya
sbc unitxyhi
tay
sec
txa
sbc unitxzlo
sta x2dcrdfr+$06
tya
sbc unitxzhi
sta x2dcords+$06
sec
lda #$00
sbc unityxlo
tax
lda #$00
sbc unityxhi
tay
sec
txa
sbc unityylo
tax
tya
sbc unityyhi
tay
sec
txa
sbc unityzlo
tya
sbc unityzhi
sta y2dcords+$06
sec
lda #$00
sbc unitzxlo
tax
lda #$00
sbc unitzxhi
tay
sec
txa
sbc unitzylo
tax
tya
sbc unitzyhi
tay
sec
txa
sbc unitzzlo
sta z2dcrdfr+$06
tya
sbc unitzzhi
sta z2dcords+$06
; p(+1;-1;-1)
sec
lda unitxxlo
sbc unitxylo
tax
lda unitxxhi
sbc unitxyhi
tay
sec
txa
sbc unitxzlo
sta x2dcrdfr+$07
tya
sbc unitxzhi
sta x2dcords+$07
sec
lda unityxlo
sbc unityylo
tax
lda unityxhi
sbc unityyhi
tay
sec
txa
sbc unityzlo
tya
sbc unityzhi
sta y2dcords+$07
sec
lda unitzxlo
sbc unitzylo
tax
lda unitzxhi
sbc unitzyhi
tay
sec
txa
sbc unitzzlo
sta z2dcrdfr+$07
tya
sbc unitzzhi
sta z2dcords+$07
; convert coordinates to 2-d
; koordinaten nach 2d wandeln
ldx #numpoint-1
convto2d ldy x2dcrdfr,x
lda x2dcords,x
jsr perspect
sta x2dcords,x
ldy z2dcrdfr,x
lda z2dcords,x
jsr perspect
sta y2dcords,x
dex
bpl convto2d
; clear the old points
; die alten punkte loeschen
bit $d011
bpl *-3
bit $d011
bmi *-3
lda #numpoint-1
clrpoint pha
tax
lda oldxcrds,x
ldy oldycrds,x
tax
lda xaddlotb,x
sta pointers+0
lda xaddhitb,x
sta pointers+1
lda #$ff
eor pixeltab,x
and (pointers+0),y
sta (pointers+0),y
pla
sec
sbc #$01
bpl clrpoint
; put the rotated points
; die rotierten punkte setzen
lda #numpoint-1
putpoint pha
tax
lda x2dcords,x
sta oldxcrds,x
ldy y2dcords,x
sty oldycrds,x
tax
lda xaddlotb,x
sta pointers+0
lda xaddhitb,x
sta pointers+1
lda pixeltab,x
ora (pointers+0),y
sta (pointers+0),y
pla
sec
sbc #$01
bpl putpoint
; advance angles
; winkel erhoehen
clc
lda #<alphaadd
adc alphalo
sta alphalo
lda #>alphaadd
adc alpha
sta alpha
clc
lda #<betaadd
adc betalo
sta betalo
lda #>betaadd
adc beta
sta beta
clc
lda #<gammaadd
adc gammalo
sta gammalo
lda #>gammaadd
adc gamma
sta gamma
jmp mainloop
;perform perspective division
;perspektivdivision vollfuehren
perspect pha
bpl nonegcrd
pha
tya
clc
eor #$ff
adc #$01
tay
pla
eor #$ff
adc #$00
nonegcrd sta dividend+0
sty dividend+1
clc
lda #$50; only positive depth
; values
; nur positive tiefen-
; werte
adc y2dcords,x
sta divisor+0
ldy #$00
sty divisor+1
iny
sty divisor+2
sec
divloop ror divisor+0
ror divisor+1
sec
lda dividend+1
sbc divisor+1
tay
lda dividend+0
sbc divisor+0
bcc *+6
sta dividend+0
sty dividend+1
rol divisor+2
bcc divloop
pla
asl a
lda divisor+2
bcc *+4
eor #$ff
adc #$40;origin is at ($40;$40)
;ursprung bei ($40;$40)
rts
nmi rti
; sine/cosine table
; sinus-/kosinustabelle
*= *&$ff00+$0100
sincoslo .byte $00,$8a,$14,$9e,$28,$b1
.byte $3a,$c2,$4a,$d1,$58,$de
.byte $62,$e6,$69,$ea,$6b,$ea
.byte $67,$e4,$5e,$d8,$4f,$c5
.byte $38,$aa,$1a,$88,$f4,$5e
.byte $c6,$2b,$8e,$ee,$4d,$a8
.byte $01,$57,$ab,$fc,$4a,$96
.byte $de,$24,$66,$a6,$e3,$1c
.byte $53,$86,$b6,$e3,$0d,$33
.byte $57,$77,$93,$ad,$c3,$d5
.byte $e4,$f0,$f9,$fe,$ff,$fe
.byte $f9,$f0,$e4,$d5,$c3,$ad
.byte $93,$77,$57,$33,$0d,$e3
.byte $b6,$86,$53,$1c,$e3,$a6
.byte $66,$24,$de,$96,$4a,$fc
.byte $ab,$57,$01,$a8,$4d,$ee
.byte $8e,$2b,$c6,$5e,$f4,$88
.byte $1a,$aa,$38,$c5,$4f,$d8
.byte $5e,$e4,$67,$ea,$6b,$ea
.byte $69,$e6,$62,$de,$58,$d1
.byte $4a,$c2,$3a,$b1,$28,$9e
.byte $14,$8a,$00,$75,$eb,$61
.byte $d7,$4e,$c5,$3d,$b5,$2e
.byte $a7,$21,$9d,$19,$96,$15
.byte $94,$15,$98,$1b,$a1,$27
.byte $b0,$3a,$c7,$55,$e5,$77
.byte $0b,$a1,$39,$d4,$71,$11
.byte $b2,$57,$fe,$a8,$54,$03
.byte $b5,$69,$21,$db,$99,$59
.byte $1c,$e3,$ac,$79,$49,$1c
.byte $f2,$cc,$a8,$88,$6c,$52
.byte $3c,$2a,$1b,$0f,$06,$01
.byte $00,$01,$06,$0f,$1b,$2a
.byte $3c,$52,$6c,$88,$a8,$cc
.byte $f2,$1c,$49,$79,$ac,$e3
.byte $1c,$59,$99,$db,$21,$69
.byte $b5,$03,$54,$a8,$fe,$57
.byte $b2,$11,$71,$d4,$39,$a1
.byte $0b,$77,$e5,$55,$c7,$3a
.byte $b0,$27,$a1,$1b,$98,$15
.byte $94,$15,$96,$19,$9d,$21
.byte $a7,$2e,$b5,$3d,$c5,$4e
.byte $d7,$61,$eb,$75
*= *+$0100
sincoshi .byte $00,$00,$01,$01,$02,$02
.byte $03,$03,$04,$04,$05,$05
.byte $06,$06,$07,$07,$08,$08
.byte $09,$09,$0a,$0a,$0b,$0b
.byte $0c,$0c,$0d,$0d,$0d,$0e
.byte $0e,$0f,$0f,$0f,$10,$10
.byte $11,$11,$11,$11,$12,$12
.byte $12,$13,$13,$13,$13,$14
.byte $14,$14,$14,$14,$15,$15
.byte $15,$15,$15,$15,$15,$15
.byte $15,$15,$15,$15,$15,$15
.byte $15,$15,$15,$15,$15,$15
.byte $15,$15,$15,$15,$15,$14
.byte $14,$14,$14,$14,$13,$13
.byte $13,$13,$12,$12,$12,$11
.byte $11,$11,$11,$10,$10,$0f
.byte $0f,$0f,$0e,$0e,$0d,$0d
.byte $0d,$0c,$0c,$0b,$0b,$0a
.byte $0a,$09,$09,$08,$08,$07
.byte $07,$06,$06,$05,$05,$04
.byte $04,$03,$03,$02,$02,$01
.byte $01,$00,$00,$ff,$fe,$fe
.byte $fd,$fd,$fc,$fc,$fb,$fb
.byte $fa,$fa,$f9,$f9,$f8,$f8
.byte $f7,$f7,$f6,$f6,$f5,$f5
.byte $f4,$f4,$f3,$f3,$f2,$f2
.byte $f2,$f1,$f1,$f0,$f0,$f0
.byte $ef,$ef,$ee,$ee,$ee,$ee
.byte $ed,$ed,$ed,$ec,$ec,$ec
.byte $ec,$eb,$eb,$eb,$eb,$eb
.byte $ea,$ea,$ea,$ea,$ea,$ea
.byte $ea,$ea,$ea,$ea,$ea,$ea
.byte $ea,$ea,$ea,$ea,$ea,$ea
.byte $ea,$ea,$ea,$ea,$ea,$ea
.byte $ea,$eb,$eb,$eb,$eb,$eb
.byte $ec,$ec,$ec,$ec,$ed,$ed
.byte $ed,$ee,$ee,$ee,$ee,$ef
.byte $ef,$f0,$f0,$f0,$f1,$f1
.byte $f2,$f2,$f2,$f3,$f3,$f4
.byte $f4,$f5,$f5,$f6,$f6,$f7
.byte $f7,$f8,$f8,$f9,$f9,$fa
.byte $fa,$fb,$fb,$fc,$fc,$fd
.byte $fd,$fe,$fe,$ff
*= *+$0100
return sei
lda #$37
sta $01
ldx #$ff
txs
jsr $fda3
lda #$00
tay
sta $02,y
iny
bne *-4
ldx #$3c
ldy #$03
stx $b2
sty $b3
ldx #$00
ldy #$a0
jsr $fd8c
jsr $fd15
jsr $ff5b
jsr $e3bf
lda #$08
sta $ba
jmp $9000